﻿#define _CRT_SECURE_NO_WARNINGS 1

#include<assert.h>

#include<iostream>
using namespace std;

//int main()
//{
//	std::cout << "hello world" << std::endl;
//
//	return 0;
//}


//简单事例
//class Stack
//{
//public:
//	// 成员函数 
//	void Init(int n = 4)
//	{
//		array = (int*)malloc(sizeof(int) * n);
//		if (nullptr == array)
//		{
//			perror("malloc申请空间失败");
//			return;
//		}
//		capacity = n;
//		top = 0;
//	}
//	void Push(int x)
//	{
//		// ...扩容 
//		array[top++] = x;
//	}
//	int Top()
//	{
//		assert(top > 0);
//		return array[top - 1];
//	}
//	void Destroy()
//	{
//		free(array);
//		array = nullptr;
//		top = capacity = 0;
//	}
//private:
//	// 成员变量 
//	int* array;
//	size_t capacity;
//	size_t top;
//}; // 分号不能省略 




//class和struct定义类的区别,一般用class
//访问限定符public，private，protected
//class Data
//{
//	int a = 1;//默认private
//public:
//	void Init(int year, int month, int day)
//	{
//		_year = year;
//		_month = month;
//		_day = day;
//	}
////private:
//public:
//	// 为了区分成员变量，⼀般习惯上成员变量 
//	// 会加⼀个特殊标识，如_ 或者 m开头 \
//	// 声明
//	int _year; // year_ m_year
//	int _month;
//	int _day;
//};
////void Data::Init(int year, int month, int day)
////{
////	_year = year;
////	_month = month;
////	_day = day;
////}//如果移出class可以这样写
//
//struct Data1
//{
//	int a = 1;
//};
//
//int main()
//{
//	Data d1;
//	d1.Init(2025, 3, 3);//public公共，可以引用
//	//d1.a;//报错，class默认访问为私人private，只能在class内部引用
//
//	//Data::_year = 2025;//不能赋值，说明Data中_year是声明，不是定义
//	//原因在于，Data d1;已经实例化出对象，分配了空间，结构体struct(类class)的实例对象Data的成员_year是静态的
//	//普通成员a属于实例.，而非类背身，若要通过类名直接访问成员，必须将a声明为静态成员(static int _year)
//
//
//	Data1 d2;
//	cout << d2.a << endl;//可以引用,struct默认访问为public
//	 
//	return 0;
//}  



//this指针
//简单举例
//class Myclass
//{
//public:
//	void printThis()
//	{
//		cout << this << endl;
//	}
//};
//int main()
//{
//	Myclass obj1, obj2;
//	obj1.printThis();//这里this指向obj1
//	obj2.printThis();//这里this指向obj2
//
//	return 0;
//}


